import {VNode} from "@vue/runtime-core";

export interface Template<T>{
    ti?: string     // 标题
    style?: string  // 样式
    sort?: boolean  // 是否开启排序
    type?: "expand" | "selection",  // 类型
    prop?: string & keyof T,  // 依赖的数据名
    className?: string, // 类名
    format?: (scope: any)=> string,   // 格式转换
    dict?: string | string[]   //词典
    // 宽度
    width?: number
    // 最小宽度
    minWidth?: number
    // 排列方式
    align?: "left" | "center" | "right"
    slot?: (scope?: any)=> VNode // 插槽
    tooltip?: boolean
    // 单选框方法
    selectTable?: (row: any, index: number)=> boolean
}
export interface ColRule<T> extends Template<T>{
    child?: ColRule<T>[]    // 子级
}
export interface Control{
    name: string     // 按钮名
    prop?: string    //指定回调传参
    type: "primary" | "success" | "info" | "warning" | "danger"     // 样式类型
    method: (val: any) => any    // 回调方法
    // 是否启用
    enable?: boolean
    pretreatment?: (data: any)=> boolean
    // 权限
    auth?: string
}
export interface TableTree<T> {
    // 列配置
    colRule: ColRule<T>[]
    // 菜单配置
    control?: Control[]
}

export interface DataList{
    dictLabel: string,
    dictValue: string
    labelClass: "primary" | "success" | "warning" | "info" | "danger"
}
export interface DictList{
    dataList: DataList[],
    dictType: string,
    dictId: string
}

// type ObjType<T> = {
//     [key in keyof T]: T[key];
// };

